iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
Modern Web

新手友善園區-如何架設人生第一個網站系列 第 24

Day-24 數據庫入門:使用 MongoDB 儲存與讀取數據

  • 分享至 

  • xImage
  •  

隨著網站應用程式的規模增長,儲存與讀取數據變得至關重要。在今天的文章中,我們將深入探討如何使用 MongoDB儲存和讀取網站數據,並利用Mongoose這個專門為 Node.js 設計的庫來進行數據庫操作。這將幫助你為網站提供一個穩定的後端數據存儲解決方案。

為什麼選擇 MongoDB?

MongoDB 是一種 NoSQL 資料庫,主要以文件形式來儲存數據,這些文件結構類似於 JSON 格式,非常適合處理多樣化和快速變動的數據。對於網站開發者來說,MongoDB 的靈活性和擴展性讓它成為一個理想的數據存儲選擇。

Mongoose 是什麼?

Mongoose 是一個 Node.js 庫,提供了一個簡單易用的 API 來與 MongoDB 互動。它允許我們定義數據模式 (Schema),並提供數據驗證、查詢和操作功能,使我們的應用程式能夠更安全、靈活地處理數據。

步驟:使用 MongoDB 和 Mongoose 儲存與讀取數據

1. 安裝 MongoDB 和 Mongoose
首先,你需要在系統上安裝 MongoDB。如果你還沒安裝,可以前往MongoDB 官方網站下載並進行安裝。
接著,我們需要在專案中安裝 Mongoose。打開你的命令行工具,運行以下命令來安裝 Mongoose:

npm install mongoose

2. 設定 MongoDB 連接
app.js文件中,新增以下代碼來連接 MongoDB:

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/mydatabase', {
    useNewUrlParser: true,
    useUnifiedTopology: true
})
.then(() => console.log('Successfully connected to MongoDB'))
.catch(err => console.error('Failed to connect to MongoDB', err));

這裡我們使用 mongodb://localhost:27017/mydatabase 來連接本地的 MongoDB 伺服器,並指定數據庫名稱為 mydatabase。如果數據庫不存在,MongoDB 會自動創建它。

3. 定義數據結構 (Schema) 和模型 (Model)
接下來,我們需要定義數據的結構。使用 Mongoose,我們可以很方便地定義 Schema,這個 Schema 就像數據的藍圖,幫助我們定義每個數據欄位應該包含什麼內容。
app.js 中,新增以下代碼來定義一個簡單的用戶結構:

const userSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true,
        unique: true
    },
    age: Number
});

const User = mongoose.model('User', userSchema);

這段代碼做了以下幾件事:

  • 定義了userSchema,包含 nameemailage 三個欄位。nameemail 是必填欄位,且 email需要是唯一的。
  • 使用 mongoose.model() 創建了一個模型 User,這個模型將用來與 MongoDB 進行交互。

4. 儲存數據到 MongoDB
接下來,我們來編寫 API,將數據儲存到 MongoDB。以下是新增用戶數據的 API 代碼:

app.post('/users', async (req, res) => {
    try {
        const newUser = new User({
            name: req.body.name,
            email: req.body.email,
            age: req.body.age
        });

        const savedUser = await newUser.save();
        res.status(201).json(savedUser);
    } catch (error) {
        res.status(400).send('Error saving user: ' + error.message);
    }
});

這段代碼的功能是:

  • 當接收到一個POST /users請求時,伺服器會創建一個新的用戶對象newUser,並將其保存到 MongoDB 資料庫中。
  • 成功後,伺服器會回傳新創建的用戶資料;如果發生錯誤,伺服器將返回錯誤訊息。

5. 從 MongoDB 讀取數據
為了從資料庫中讀取用戶數據,我們可以使用以下代碼來查詢所有的用戶資料:

app.get('/users', async (req, res) => {
    try {
        const users = await User.find();
        res.json(users);
    } catch (error) {
        res.status(500).send('Error retrieving users: ' + error.message);
    }
});

這段代碼做了以下幾件事:

  • 當接收到 GET /users 請求時,伺服器會從 MongoDB 中查詢所有的用戶,並將其以 JSON 格式回傳。
  • 如果查詢過程中出現錯誤,伺服器會回傳錯誤訊息。

6. 更新與刪除數據
除了儲存與讀取數據,Mongoose 也支援更新與刪除數據。以下是更新用戶數據的範例:

app.put('/users/:id', async (req, res) => {
    try {
        const updatedUser = await User.findByIdAndUpdate(req.params.id, req.body, { new: true });
        res.json(updatedUser);
    } catch (error) {
        res.status(400).send('Error updating user: ' + error.message);
    }
});

這段代碼使用了findByIdAndUpdate()方法來根據用戶的 ID 更新數據,並回傳更新後的用戶資料。

刪除數據也相當簡單,使用以下代碼:

app.delete('/users/:id', async (req, res) => {
    try {
        await User.findByIdAndDelete(req.params.id);
        res.send('User deleted');
    } catch (error) {
        res.status(400).send('Error deleting user: ' + error.message);
    }
});

這裡我們使用 findByIdAndDelete() 方法根據用戶 ID 刪除指定的用戶數據。

測試你的 API

你可以使用工具如 Postman 或 curl 來測試上述 API。這些 API 操作包括創建用戶、查詢用戶、更新用戶和刪除用戶,這些功能是構建 RESTful API 的基礎。

結論

今天我們學習了如何將 MongoDB 和 Mongoose 結合起來,實現數據庫的儲存與讀取功能。我們從 MongoDB 的安裝開始,逐步了解如何使用 Mongoose 來定義數據結構,並透過 Express.js 构建 API 來儲存、查詢、更新和刪除數據。

透過這些知識,你可以開始構建更加完整的網站後端,實現數據持久化的功能。希望你能運用這些工具為你的網站創造穩定且高效的數據處理機制!


上一篇
Day-23 與數據庫溝通:初探 Express.js
下一篇
Day-25 與數據庫整合:使用 Express.js 與 MongoDB 進行數據持久化
系列文
新手友善園區-如何架設人生第一個網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言